package entities;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.LazyCollection;

@Entity
@Table(name="areas")
public class AreaEntity implements Serializable{


		@Transient
		private static final long serialVersionUID = 1L;
		
		@Id @GeneratedValue
		private Integer id;
		@ManyToOne
		@JoinColumn(name="idDeposito")
		private DepositoEntity deposito;
		private Integer disponibilidad;
		private String tipo;
//		@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
//		@Fetch(value = FetchMode.SUBSELECT)
////		@OneToMany(cascade=CascadeType.ALL)
//		@JoinColumn(name ="idArea")
//		private List<ComandaEntity> comandas = new ArrayList<ComandaEntity>();
		
		public AreaEntity() {
//			deposito = new DepositoEntity();
		}

//		public AreaEntity(String tipo) {
//			this.tipo = tipo;
//			deposito = new DepositoEntity();
//		}
		
		
		
		public Integer getId() {
			return id;
		}
		public void setId(Integer id) {
			this.id = id;
		}
		public DepositoEntity getDeposito() {
			return deposito;
		}
		public void setDeposito(DepositoEntity deposito) {
			this.deposito = deposito;
		}
		public Integer getDisponibilidad() {
			return disponibilidad;
		}
		public void setDisponibilidad(Integer disponibilidad) {
			this.disponibilidad = disponibilidad;
		}
		public String getTipo() {
			return tipo;
		}
		public void setTipo(String tipo) {
			this.tipo = tipo;
		}
//		public List<ComandaEntity> getComandas() {
//			return comandas;
//		}
//		public void setComandas(List<ComandaEntity> comandas) {
//			this.comandas = comandas;
//		}

		@Override
		public int hashCode() {
			final int prime = 31;
			int result = 1;
			result = prime * result
					+ ((deposito == null) ? 0 : deposito.hashCode());
			result = prime
					* result
					+ ((disponibilidad == null) ? 0 : disponibilidad.hashCode());
			result = prime * result + ((id == null) ? 0 : id.hashCode());
			result = prime * result + ((tipo == null) ? 0 : tipo.hashCode());
			return result;
		}

		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			AreaEntity other = (AreaEntity) obj;
			if (deposito == null) {
				if (other.deposito != null)
					return false;
			} else if (!deposito.equals(other.deposito))
				return false;
			if (disponibilidad == null) {
				if (other.disponibilidad != null)
					return false;
			} else if (!disponibilidad.equals(other.disponibilidad))
				return false;
			if (id == null) {
				if (other.id != null)
					return false;
			} else if (!id.equals(other.id))
				return false;
			if (tipo == null) {
				if (other.tipo != null)
					return false;
			} else if (!tipo.equals(other.tipo))
				return false;
			return true;
		}
		
		

}
